]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
scroll-view: Make scrollbar position locale aware
authorFlorian Müllner <fmuellner@gnome.org>
Thu, 24 Feb 2011 00:34:44 +0000 (01:34 +0100)
committerFlorian Müllner <fmuellner@gnome.org>
Thu, 24 Feb 2011 11:30:05 +0000 (12:30 +0100)
In RTL locales, the vertical scrollbar should be located on the
left, so take the widget's text direction into account when
allocating the view's elements.

https://bugzilla.gnome.org/show_bug.cgi?id=643156

src/st/st-scroll-view.c

index c56182e114f02ab519a27c6f01e1fdd9bdc6a2b7..3f7c12a75943914bc751637f6560f97e37b10c35 100644 (file)
@@ -595,9 +595,17 @@ st_scroll_view_allocate (ClutterActor          *actor,
   /* Vertical scrollbar */
   if (CLUTTER_ACTOR_IS_VISIBLE (priv->vscroll))
     {
-      child_box.x1 = content_box.x2 - sb_width;
+      if (st_widget_get_direction (ST_WIDGET (actor)) == ST_TEXT_DIRECTION_RTL)
+        {
+          child_box.x1 = content_box.x1;
+          child_box.x2 = content_box.x1 + sb_width;
+        }
+      else
+        {
+          child_box.x1 = content_box.x2 - sb_width;
+          child_box.x2 = content_box.x2;
+        }
       child_box.y1 = content_box.y1;
-      child_box.x2 = content_box.x2;
       child_box.y2 = content_box.y2 - (hscrollbar_visible ? sb_height : 0);
 
       clutter_actor_allocate (priv->vscroll, &child_box, flags);
@@ -606,9 +614,17 @@ st_scroll_view_allocate (ClutterActor          *actor,
   /* Horizontal scrollbar */
   if (CLUTTER_ACTOR_IS_VISIBLE (priv->hscroll))
     {
-      child_box.x1 = content_box.x1;
+      if (st_widget_get_direction (ST_WIDGET (actor)) == ST_TEXT_DIRECTION_RTL)
+        {
+          child_box.x1 = content_box.x1 + (vscrollbar_visible ? sb_width : 0);
+          child_box.x2 = content_box.x2;
+        }
+      else
+        {
+          child_box.x1 = content_box.x1;
+          child_box.x2 = content_box.x2 - (vscrollbar_visible ? sb_width : 0);
+        }
       child_box.y1 = content_box.y2 - sb_height;
-      child_box.x2 = content_box.x2 - (vscrollbar_visible ? sb_width : 0);
       child_box.y2 = content_box.y2;
 
       clutter_actor_allocate (priv->hscroll, &child_box, flags);
@@ -623,9 +639,17 @@ st_scroll_view_allocate (ClutterActor          *actor,
     sb_width = 0;
 
   /* Child */
-  child_box.x1 = content_box.x1;
+  if (st_widget_get_direction (ST_WIDGET (actor)) == ST_TEXT_DIRECTION_RTL)
+    {
+      child_box.x1 = content_box.x1 + sb_width;
+      child_box.x2 = content_box.x2;
+    }
+  else
+    {
+      child_box.x1 = content_box.x1;
+      child_box.x2 = content_box.x2 - sb_width;
+    }
   child_box.y1 = content_box.y1;
-  child_box.x2 = content_box.x2 - sb_width;
   child_box.y2 = content_box.y2 - sb_height;
 
   if (priv->child)